/**
 * LayUI模块化应用公共JS文件
 */

// 全局配置
var AppConfig = {
    version: '1.0.0',
    debug: true,
    componentsPath: 'components/',
    cssPath: 'css/',
    jsPath: 'js/'
};

// 页面管理器
var PageManager = {
    currentPage: '',
    
    // 初始化页面
    init: function() {
        this.currentPage = this.getCurrentPage();
        this.setActiveNav();
        this.bindEvents();
    },
    
    // 获取当前页面名称
    getCurrentPage: function() {
        var path = window.location.pathname;
        var page = path.substring(path.lastIndexOf('/') + 1, path.lastIndexOf('.'));
        return page || 'index';
    },
    
    // 设置导航激活状态
    setActiveNav: function() {
        // 移除所有激活状态
        $('.layui-nav-tree .layui-nav-item').removeClass('layui-this');
        $('.layui-nav-tree .layui-nav-child dd').removeClass('layui-this');
        
        // 设置当前页面激活状态
        var page = this.currentPage;
        $('#nav-' + page).addClass('layui-this');
        
        // 特殊处理子菜单激活
        var parentNav = this.getParentNav(page);
        if (parentNav) {
            $('#nav-' + parentNav).addClass('layui-nav-itemed');
        }
    },
    
    // 获取父级导航
    getParentNav: function(page) {
        var navMap = {
            'table': 'component',
            'form': 'component',
            'layer': 'component',
            'echarts': 'data',
            'mihomolink': 'data',
            'mihomobyday': 'data',
            'mihomobyproc': 'data',
            'v2reslove': 'data'
        };
        return navMap[page];
    },
    
    // 绑定事件
    bindEvents: function() {
        var that = this;
        
        // 导航点击事件
        $('.layui-nav-tree .layui-nav-item a').on('click', function() {
            var href = $(this).attr('href');
            if (href && href !== 'javascript:;' && !href.startsWith('javascript:')) {
                that.setActiveNav();
            }
        });
    }
};

// 组件加载器
var ComponentLoader = {
    // 加载组件
    load: function(componentName, containerId, callback) {
        var container = $('#' + containerId);
        if (!container.length) {
            console.error('Container not found: ' + containerId);
            return;
        }
        
        // 显示加载状态
        this.showLoading(container);
        
        // 加载组件
        $.ajax({
            url: AppConfig.componentsPath + componentName + '.html',
            type: 'GET',
            dataType: 'html',
            success: function(data) {
                container.html(data);
                if (callback) {
                    callback();
                }
                // 重新渲染LayUI组件
                layui.element.render();
            },
            error: function(xhr, status, error) {
                console.error('Failed to load component: ' + componentName, error);
                container.html('<div class="error-container"><i class="layui-icon layui-icon-close-fill"></i><h3>组件加载失败</h3><p>' + error + '</p></div>');
            },
            complete: function() {
                // 隐藏加载状态
                ComponentLoader.hideLoading(container);
            }
        });
    },
    
    // 显示加载状态
    showLoading: function(container) {
        container.html('<div class="component-loading"><i class="layui-icon layui-icon-loading"></i><p>加载中...</p></div>');
    },
    
    // 隐藏加载状态
    hideLoading: function(container) {
        container.find('.component-loading').remove();
    }
};

// 工具函数
var Utils = {
    // 格式化存储大小
    formatStorage: function(bytes) {
        if (!bytes || isNaN(bytes)) return '0 B';
        if (bytes < 1024) return bytes + ' B';
        if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(2) + ' KB';
        if (bytes < 1024 * 1024 * 1024) return (bytes / (1024 * 1024)).toFixed(2) + ' MB';
        return (bytes / (1024 * 1024 * 1024)).toFixed(2) + ' GB';
    },
    
    // 格式化时间
    formatTime: function(timestamp) {
        var date = new Date(timestamp);
        return date.getFullYear() + '-' + 
               String(date.getMonth() + 1).padStart(2, '0') + '-' + 
               String(date.getDate()).padStart(2, '0') + ' ' + 
               String(date.getHours()).padStart(2, '0') + ':' + 
               String(date.getMinutes()).padStart(2, '0') + ':' + 
               String(date.getSeconds()).padStart(2, '0');
    },
    
    // 显示消息
    showMessage: function(msg, type) {
        type = type || 'info';
        layer.msg(msg, {
            icon: type === 'success' ? 1 : type === 'error' ? 2 : type === 'warning' ? 7 : 0,
            time: 2000
        });
    },
    
    // 显示加载层
    showLoading: function(msg) {
        msg = msg || '加载中...';
        return layer.msg(msg, {
            icon: 16,
            shade: 0.01,
            time: false
        });
    },
    
    // 关闭加载层
    closeLoading: function(index) {
        if (index) {
            layer.close(index);
        } else {
            layer.closeAll('loading');
        }
    }
};

// 页面切换函数（用于单页面模式）
function switchPage(pageId) {
    // 隐藏所有页面
    $('.content-page').hide();
    
    // 显示指定页面
    $('#' + pageId).show();
    
    // 更新页面标题
    updatePageTitle(pageId);
    
    // 更新导航状态
    updateNavActive(pageId);
}

// 更新页面标题
function updatePageTitle(pageId) {
    var titles = {
        'home': '首页',
        'table': '表格示例',
        'form': '表单示例',
        'layer': '弹出层示例',
        'about': '关于我们'
    };
    
    document.title = (titles[pageId] || '页面') + ' - LayUI模块化应用';
}

// 更新导航激活状态
function updateNavActive(pageId) {
    // 移除所有激活状态
    $('.layui-nav-tree .layui-nav-item').removeClass('layui-this');
    $('.layui-nav-tree .layui-nav-child dd').removeClass('layui-this');
    
    // 设置当前页面激活状态
    $('.layui-nav-tree .layui-nav-item a[data-id="' + pageId + '"]').parent().addClass('layui-this');
}

// 初始化函数
function initApp() {
    // 初始化页面管理器
    PageManager.init();
    
    // 显示调试信息
    if (AppConfig.debug) {
        console.log('LayUI模块化应用已初始化');
        console.log('当前页面：', PageManager.currentPage);
    }
}

// 页面加载完成后初始化
$(document).ready(function() {
    // 等待LayUI加载完成
    layui.use(['element', 'layer', 'form', 'table'], function() {
        // 初始化应用
        initApp();
    });
});